Microsoft Defender のマルウェア検知イベントを通知してみた

Microsoft Defender のマルウェア検知イベントを通知してみた

Clock Icon2024.11.06

こんにちは。テクニカルサポートチームのShiinaです。

はじめに

Microsoft Defender は Microsoft が提供する総合的なセキュリティソリューションであり、マルウェアなどの脅威の検出、駆除といった対策機能が含まれています。
脅威を検知したら即座に通知を行いたいといったユースケースが考えられます。
Microsoft Defender のマルウェア検知イベントを SNS トピックにパブリッシュして、メール通知を行う仕組みを実装してみました。

Microsoft Defender の脅威検知イベントについて

Microsoft Defender はマルウェアなどの脅威を検知すると、Windows イベントログのアプリケーションとサービス ログ「Microsoft-Windows-Windows Defender/Operational」にイベント ID 1116のイベントログを発行します。

イベントID

前提

  • AWS Tools for PowerShell がインストールされていること
  • Amazon SNS サービスエンドポイントに対して通信可能であること
    東京リージョンの場合:sns.ap-northeast-1.amazonaws.com

設定の流れ

はじめに SNS トピックを作成します。
次に EC2 インスタンスロールに対して SNS トピック にパブリッシュが行えるよう、必要なポリシーを付与します。
AWS Tools for PowerShell コマンドを利用して、 SNS トピック に対してパブリッシュを行う、PowerShell スクリプトを配置します。
タスクスケジューラを使用して、イベント ID 1116 のイベントログが発行されたことを条件にスクリプトを実行させます。

設定手順

1.SNS トピック の作成

Amazon SNS コンソールメニューよりトピックを選択し、[トピックの作成]を行います。

トピック-Simple-Notification-Service-ap-northeast-1-11-06-2024_09_17_AM

スタンダートタイプを選択の上、任意の名前を入力し[トピックの作成]をクリックします。

トピックの作成-トピック-Simple-Notification-Service-ap-northeast-1-11-01-2024_05_30_PM

次に[サブスクリプションの作成]をクリックします。

TestTopic-トピック-Simple-Notification-Service-ap-northeast-1-11-01-2024_05_31_PM

プロトコルは E メール を選択し、エンドポイントにメールアドレスを入力し[サブスクリプションの作成]をクリックします。

サブスクリプションの作成-サブスクリプション-Simple-Notification-Service-ap-northeast-1-11-01-2024_05_32_PM-png-1500×988--11-05-2024_05_40_PM.png

入力したメールアドレス宛にサブスクリプションの確認メールが届きますので、承諾します。
サブスクリプションのステータスが確認済みとなったことを確認します。

TestTopic-トピック-Simple-Notification-Service-ap-northeast-1-11-01-2024_05_35_PM

2.EC2 インスタンスロールの設定

EC2 インスタンスロールに次のインラインポリシーをアタッチします。
Resource には 作成した SNS トピック の ARN を指定します。

SNSTopicPublish
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "arn:aws:sns:ap-northeast-1:xxxxxxxxxxxx:YourTopicName"
        }
    ]
}

ec2-ssm-snstopic-IAM-Global-11-01-2024_05_40_PM

3.スクリプトの配置

下記の PowerShell スクリプトを任意のファイルパスへ配置します。
今回はファイルパスが C:\Script\Send-SNSTopic.ps1 となるように配置しています。
$topicArn には 作成した SNS トピック の ARN を指定します。

Send-SNSTopic.ps1
# SNS トピック ARN
$topicArn = "arn:aws:sns:ap-northeast-1:xxxxxxxxxxxx:YourTopicName"
# インスタンスIDを取得
$instanceId= Get-EC2InstanceMetadata -Category InstanceId 
# イベントログから最新のイベントID 1116 を取得
$event = Get-WinEvent -LogName "Microsoft-Windows-Windows Defender/Operational" | Where-Object { $_.Id -eq 1116 } | Select-Object -First 1

if ($event) {
    # イベントの詳細を取得
    $eventMessage = $event.Message
    $eventTime = $event.TimeCreated

    # SNS メッセージ内容
    $message = "Microsoft Defender detected malware on EC2 instance $instanceId at $eventTime." + `
               [Environment]::NewLine + "Details: $eventMessage"

    # SNS トピックに通知を送信
    Publish-SNSMessage -TopicArn $topicArn -Message $message
}

4.タスクスケジューラのタスク設定

PowerShell コマンドを利用してタスクスケジューラにタスクの登録を行います。

$Action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-ExecutionPolicy Bypass -File "C:\Script\Send-SNSTopic.ps1"'
$Principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
$Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -RunOnlyIfNetworkAvailable
$CIMTriggerClass = Get-CimClass -ClassName MSFT_TaskEventTrigger -Namespace Root/Microsoft/Windows/TaskScheduler:MSFT_TaskEventTrigger
$Trigger = New-CimInstance -CimClass $CIMTriggerClass -ClientOnly
$Trigger.Subscription = 
@"
<QueryList>
  <Query Id="0" Path="Microsoft-Windows-Windows Defender/Operational">
    <Select Path="Microsoft-Windows-Windows Defender/Operational">*[System[(EventID=1116)]]</Select>
  </Query>
</QueryList>
"@
$Trigger.Enabled = $true
$Task = New-ScheduledTask -Action $Action -Principal $Principal -Trigger $Trigger -Settings $Settings
Register-ScheduledTask -TaskName "Defender Malware Detection Notification" -Action $Action -Principal $Principal -Trigger $Trigger -Settings $Settings -Force

次のような結果が返ってくることを確認します。

TaskPath                                       TaskName                          State
--------                                       --------                          -----
\                                              Defender Malware Detection Not... Ready

タスクスケジューラで確認すると「Defender Malware Detection Notification」という名前のタスクが登録されています。

タスクスケジュール

やってみた

EICAR テストファイルを利用し、Microsoft Defender でマルウェア検知イベントを発生させて、メール通知が行えるかやってみました。

EICAR テストファイルの配置を行います。
下記 URL より文字列をコピーして任意のフォルダに EICAR.txt というファイル名でテキストファイルを保存します。

https://learn.microsoft.com/ja-jp/defender-endpoint/validate-antimalware#eicar-test-file-to-simulate-malware

EICARテスト

ファイルを保存するとすぐさま Microsoft Defender で脅威を検知します。

脅威検出

イベントログにイベントID 1116 のイベントが記録されました。

イベントID

タスクスケジューラのタスクが実行され、スクリプトが起動し、SNS トピックにパブリッシュが行われます。

実行中

脅威検知を知らせるメールが届きました!

AWS-Notification-Message-shiina-yuichi-classmethod-jp-Classmethod-jp-メール-11-01-2024_02_31_PM

まとめ

マルウェア検知イベント検知時にタスクスケジューラを利用してスクリプトを実行させ、 SNS を通じてメール通知する仕組みの実装してみました。
Microsoft Defender によるマルウェア検知の通知を元に初動対応を行うといったことができると思います。

本記事が誰かのお役に立てれば幸いです。

参考

https://learn.microsoft.com/ja-jp/defender-endpoint/troubleshoot-microsoft-defender-antivirus#-----id-1116

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.